package bavaria.hightech.banking;

import java.util.Calendar;
import bavaria.hightech.exceptions.FestgeldKontoNichtUeberziehbar;
import bavaria.hightech.konditionen.GiroKonditionen;
import bavaria.hightech.konditionen.GiroZinsen;
import bavaria.hightech.money.Money;
import bavaria.hightech.zeitgeber.Zeitgeber;

public class GiroKonto extends Konto{

	private GiroKonditionen gkon;
	
	public GiroKonto(int kontonr, String kontoinhaber, GiroKonditionen gkon) {
		super(kontonr, kontoinhaber);
		this.gkon = gkon;
	}

	@Override
	public void verzinsen() throws FestgeldKontoNichtUeberziehbar {
		if(Zeitgeber.getInstance().getCalendar().get(Calendar.DAY_OF_MONTH) == 1){
			if(getKontostand().getBetrag() >= 0)
				einzahlen(new Money((long)(getKontostand().getBetrag()*GiroZinsen.getInstance().getHabenzins()/100), getKontostand().getCurrency()), 
						"Verzinsen");
			else 
				abheben(new Money((long)(-getKontostand().getBetrag()*GiroZinsen.getInstance().getSollzins()/100), getKontostand().getCurrency()),
						"Verzinsen");
		}
		
	}
	
	@Override
	public void abheben(Money betrag, String grund) throws FestgeldKontoNichtUeberziehbar{
		if(getKontostand().add(new Money(-betrag.getBetrag(), betrag.getCurrency())).getBetrag() 
				>= gkon.getBonitaet(gkon.getBonitaetsgruppe()) ){
			super.abheben(betrag, grund);
		}
		else
			throw new FestgeldKontoNichtUeberziehbar("Bonitaet ueberschritten, und ja eigentlich waere dafuer eine eigene Exception noetig");
	}

}
